From c61c1550415278597c3652e758bceccc37457193 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Fri, 5 May 2006 14:09:07 +0100 Subject: [PATCH] Instead of just having the bootloader config sxp replace anything else, merge with given values. This will allow a bootloader to not have to specify everything which is useful for bootloaders other than pygrub. Signed-off-by: Jeremy Katz --- tools/python/xen/xend/XendBootloader.py | 10 ++++++++-- tools/python/xen/xend/XendDomainInfo.py | 3 ++- tools/python/xen/xm/create.py | 14 ++++++++------ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/tools/python/xen/xend/XendBootloader.py b/tools/python/xen/xend/XendBootloader.py index 143bf36904..9c062e4c4b 100644 --- a/tools/python/xen/xend/XendBootloader.py +++ b/tools/python/xen/xend/XendBootloader.py @@ -19,7 +19,7 @@ import sxp from XendLogging import log from XendError import VmError -def bootloader(blexec, disk, quiet = 0, blargs = None): +def bootloader(blexec, disk, quiet = 0, blargs = None, imgcfg = None): """Run the boot loader executable on the given disk and return a config image. @param blexec Binary to use as the boot loader @@ -86,4 +86,10 @@ def bootloader(blexec, disk, quiet = 0, blargs = None): pin = sxp.Parser() pin.input(ret) pin.input_eof() - return pin.val + blcfg = pin.val + + if imgcfg is None: + return blcfg + else: + c = sxp.merge(blcfg, imgcfg) + return c diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index d88799bc7c..f42d992b40 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -1633,7 +1633,8 @@ class XendDomainInfo: continue fn = blkdev_uname_to_file(disk) blcfg = bootloader(self.info['bootloader'], fn, 1, - self.info['bootloader_args']) + self.info['bootloader_args'], + self.info['image']) break if blcfg is None: msg = "Had a bootloader specified, but can't find disk" diff --git a/tools/python/xen/xm/create.py b/tools/python/xen/xm/create.py index dd7d1675a9..fffa836896 100644 --- a/tools/python/xen/xm/create.py +++ b/tools/python/xen/xm/create.py @@ -448,8 +448,11 @@ def strip(pre, s): def configure_image(vals): """Create the image config. """ + if not vals.builder: + return None config_image = [ vals.builder ] - config_image.append([ 'kernel', os.path.abspath(vals.kernel) ]) + if vals.kernel: + config_image.append([ 'kernel', os.path.abspath(vals.kernel) ]) if vals.ramdisk: config_image.append([ 'ramdisk', os.path.abspath(vals.ramdisk) ]) if vals.cmdline_ip: @@ -616,7 +619,7 @@ def configure_hvm(config_image, vals): if (vals.__dict__[a]): config_image.append([a, vals.__dict__[a]]) -def run_bootloader(vals): +def run_bootloader(vals, config_image): if not os.access(vals.bootloader, os.X_OK): err("Bootloader isn't executable") if len(vals.disk) < 1: @@ -630,7 +633,7 @@ def run_bootloader(vals): vals.bootargs = "--entry=%s" %(vals.bootentry,) return bootloader(vals.bootloader, file, not vals.console_autoconnect, - vals.bootargs) + vals.bootargs, config_image) def make_config(vals): """Create the domain configuration. @@ -662,13 +665,12 @@ def make_config(vals): if vals.tpmif: config.append(['backend', ['tpmif']]) + config_image = configure_image(vals) if vals.bootloader: - config_image = run_bootloader(vals) + config_image = run_bootloader(vals, config_image) config.append(['bootloader', vals.bootloader]) if vals.bootargs: config.append(['bootloader_args'], vals.bootargs) - else: - config_image = configure_image(vals) config.append(['image', config_image]) config_devs = [] -- 2.30.2